#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

ll quick_power(ll a,ll n,ll mod){
	ll ans=1;
	while(n){
		if(n&1)ans=(ans*a)%mod;
		n>>=1;
		a=(a*a)%mod;
	}
	return ans;
}

const ll mod=1e9+7;

template <typename T>
struct Fenwick{
    int n;
    vector<T> a;

    Fenwick(int n_ = 0){
        init(n_);
    }

    void init(int n_){
        n=n_;
        a.assign(n,T{});
    }

    void add(int x,const T &v){
        for(int i=x+1;i<=n;i+=i&-i){
            a[i-1]+=v;
        }
    }

    //[0,x);
    T sum(int x){
        T ans{};
        for(int i=x;i>0;i-=i&-i){
            ans+=a[i-1];
        }
        return ans;
    }

    //[l,r);
    T rangeSum(int l,int r){
        return sum(r) - sum(l);
    }

    //rangeSum[0,x)>k
    int select(const T &k){
        int x=0;
        T cur{};
        for(int i=1<<__lg(n);i;i/=2){
            if(x+i<=n&&cur+a[x+i-1]<=k){
                x+=i;
                cur=cur+a[x-1];
            }
        }
        return x;
    }
};

void solve(){
	ll n;
	cin>>n;
	vector<ll> a(n+5);
    ll ans=quick_power(2,n,mod);
    for(int i=1;i<=n;i++){
    	cin>>a[i];
    }
    Fenwick<ll>fw0(n+5);
    for(int i=1;i<=n;i++){
    	Fenwick<ll> fw(n+5);
    	for(int j=i+1;j<=n;j++){
    		fw.add(a[j],1);
    		if(a[i]-a[j]<=1||j-i<=1)continue;
    		ll len=j-i-1;
    		ll cnt=fw.rangeSum(a[j]+1,a[i]);
    		if(cnt==0)continue;
    		cerr<<"i: "<<i<<" j: "<<j<<" cnt: "<<cnt<<endl;
    		ll temp=(quick_power(2,cnt,mod)-1)*quick_power(2,len-cnt,mod)%mod;
    		ll temp1=fw0.sum(a[i]);
    		temp=temp*quick_power(2,temp1,mod)%mod;
    		// cerr<<"temp:"<<temp<<endl;
    		ans=(ans-temp+mod)%mod;
    	}
    	fw0.add(a[i],1);
    }
    cout<<ans<<endl;
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int t=1;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}